#ifndef _DISP_MANAGER_H
#define _DISP_MANAGER_H

#include <font_manager.h>
#include <common.h>



//表示显存的起点(基地址)和大小
typedef struct DisBuff{
	int iXres;	//宽度，即每行有多少个像素
	int iYres;	//高度，即总共有多少行
	int iBpp;	//像素位宽
	char *buff;	//显存的基地址
}DispBuff, *pDispBuff;



/*显示器结构体
 *定义接口，支持多种显示方式(LCD/web输出)
 *每种显示方式实现一个对应的结构体供主程序选择调用
 */
typedef struct DispOpr {
	char *name;
	int (*DeviceInit) (void);
	int (*DeviceExit) (void);
	int (*GetBuffer) (pDispBuff ptDisBuff);
	int (*FlushRegion) (PRegion ptRegion, pDispBuff ptDispBuff);
	struct DispOpr *ptNext;
}DispOpr, *pDispOpr;

//注册显示设备结构体
void FrambufferRegister(void);
void RegisterDisplay(pDispOpr ptDispOpr);
void DisplaySystemRegister(void);

//注册好之后从中选择默认的设备
int SelectDefaultDisplay(char *name);

//初始化被选择的设备
int InitDefaultDisplay(void);

//获得屏幕对应的显存
pDispBuff GetDisplayBuffer(void);

//描点函数
int PutPixel(int x, int y, unsigned int dwColor);

//刷新到屏幕
int FlushDisplayRegion(PRegion ptRegion, pDispBuff ptDispBuff);

//绘制文字的位图
void DrawFontBitMap(pFontBitMap ptFontBitMap, unsigned int dwColor);

//给指定区域覆盖默认颜色
void DrawRegion(PRegion ptRegion, unsigned int dwColor);

void DrawTextInReginCentral(char *name, PRegion ptRegion, unsigned int dwColor);


#endif
